Abstract
Testeo de una estrategia de inversión del tipo pasiva y una estrategia de inversión del tipo activa con las emisoras que componen al NAFTRAC. La inversión pasiva consiste en comprar y mantener, mientras que la inversión activa consiste en la formación de un portafolio eficiente con un rebalanceo constante de acuerdo a un algoritmo definido. Evaluación del desempeño de ambas estrategias.
En este Laboratorio 1: Inversión de Capital se tiene por objetivo el responder a la pregunta: ¿Qué estrategia de inversión propondrías si tu trabajo fuera invertir un millón de pesos? Para lograrlo se testearán dos estrategias de inversión: una pasiva y otra activa; por medio del uso del lenguaje de programación Python, y algunos conceptos y técnicas de la estadística y las matemáticas financieras avanzadas. La estrategia de inversión pasiva consiste en únicamente comprar los títulos que componen al ETF NAFTRAC para replicar el comportamiento del Índice de Precios y Cotizaciones (IPC) de la Bolsa Mexicana de Valores (BMV). En cambio, la estrategia de inversión activa consiste en formar un portafolio eficiente con estos títulos (del NAFTRAC) y en aplicar un rebalanceo mensual mediante un algoritmo definido para la compra/venta de títulos. Estas estrategias se pondrán a prueba y se evaluará su desempeño para responder a la pregunta propuesta.
Algunos supuestos que se toman para la elaboración del presente laboratorio son:
Para correr este archivo, es necessario tener instaladas y/o tener el archivo the_requirements.txt_ con las siguientes librerías:
Las siguientes son dependencias de archivos que se necesitan para correr este cuaderno de Jupyter:
import main
# Configuración del capital inicial y la comisión por transacción
capital, comision = 1000000, 0.00125
En esta sección se replica el comportamiento del IPC a través de la adquisición de los títulos que componen al NAFTRAC en la fecha del $2020-01-31$. Esta estrategia del tipo pasiva consiste en simplemente comprar y mantener a las acciones de las emisoras listadas en cartera hasta la fecha del $2022-07-29$.
Se muestra un DataFrame con la siguiente información:
Títulos. Número de acciones adquiridas para la emisora en cuestión.Costo de Compra Bruto. Erogación por concepto de la adquisición de las acciones de la emisora en cuestión (sin tomar en cuenta costos de transacción). Comisión. Comisión por concepto de la adquisición de las acciones de la emisora en cuestión.Costo de Compra Total. Erogación por concepto de la adquisición de las acciones de la emisora en cuestión (tomando en cuenta costos de transacción).Ponderación. Importancia de la posición en la emisora en cuestión respecto al portafolio total.# Selección de fechas para la elaboración del backtest
fechaInicio, fechaFin = "2020-01-31", "2022-07-30"
# Estrategia de inversión pasiva
df_pasiva_info, df_pasiva, df_pasiva_metricas, fig1 = main.estrategiaInversionPasiva(capital, comision, fechaInicio, fechaFin)
df_pasiva_info
| Títulos | Costo de Compra Bruto | Comisión | Costo de Compra Total | Ponderación | |
|---|---|---|---|---|---|
| AMXL.MX | 9537.0000 | 136818.4814 | 171.0231 | 136989.5045 | 0.1368 |
| FEMSAUBD.MX | 738.0000 | 118301.6500 | 147.8771 | 118449.5271 | 0.1183 |
| GFNORTEO.MX | 1003.0000 | 106162.1842 | 132.7027 | 106294.8869 | 0.1062 |
| WALMEX.MX | 1938.0000 | 103765.8299 | 129.7073 | 103895.5372 | 0.1038 |
| GMEXICOB.MX | 1421.0000 | 60207.8877 | 75.2599 | 60283.1476 | 0.0602 |
| CEMEXCPO.MX | 5654.0000 | 42942.1288 | 53.6777 | 42995.8065 | 0.0429 |
| TLEVISACPO.MX | 957.0000 | 39527.7426 | 49.4097 | 39577.1523 | 0.0395 |
| GAPB.MX | 151.0000 | 32652.2800 | 40.8153 | 32693.0953 | 0.0327 |
| ELEKTRA.MX | 22.0000 | 30072.4531 | 37.5906 | 30110.0437 | 0.0301 |
| ASURB.MX | 80.0000 | 27176.7139 | 33.9709 | 27210.6848 | 0.0272 |
| KIMBERA.MX | 598.0000 | 20550.8345 | 25.6885 | 20576.5230 | 0.0206 |
| BIMBOA.MX | 581.0000 | 18671.0369 | 23.3388 | 18694.3757 | 0.0187 |
| OMAB.MX | 150.0000 | 18375.3639 | 22.9692 | 18398.3331 | 0.0184 |
| AC.MX | 186.0000 | 17598.4719 | 21.9981 | 17620.4700 | 0.0176 |
| GFINBURO.MX | 820.0000 | 17568.4994 | 21.9606 | 17590.4600 | 0.0176 |
| IENOVA.MX | 194.0000 | 17210.7093 | 21.5134 | 17232.2227 | 0.0172 |
| PINFRA.MX | 87.0000 | 16661.7001 | 20.8271 | 16682.5272 | 0.0167 |
| GRUMAB.MX | 90.0000 | 16768.5397 | 20.9607 | 16789.5004 | 0.0168 |
| ORBIA.MX | 413.0000 | 16678.7648 | 20.8485 | 16699.6133 | 0.0167 |
| ALFAA.MX | 1069.0000 | 15076.9508 | 18.8462 | 15095.7970 | 0.0151 |
| GCARSOA1.MX | 175.0000 | 11567.8202 | 14.4598 | 11582.2799 | 0.0116 |
| PE&OLES.MX | 46.0000 | 9073.4031 | 11.3418 | 9084.7449 | 0.0091 |
| ALSEA.MX | 187.0000 | 8569.2751 | 10.7116 | 8579.9867 | 0.0086 |
| BBAJIOO.MX | 331.0000 | 8275.2014 | 10.3440 | 8285.5454 | 0.0083 |
| GENTERA.MX | 392.0000 | 8088.3810 | 10.1105 | 8098.4915 | 0.0081 |
| MEGACPO.MX | 124.0000 | 7837.2301 | 9.7965 | 7847.0266 | 0.0078 |
| LIVEPOLC-1.MX | 79.0000 | 7304.2152 | 9.1303 | 7313.3454 | 0.0073 |
| BOLSAA.MX | 191.0000 | 7183.0781 | 8.9788 | 7192.0569 | 0.0072 |
| CUERVO.MX | 197.0000 | 6660.1509 | 8.3252 | 6668.4761 | 0.0067 |
| LABB.MX | 306.0000 | 6175.2009 | 7.7190 | 6182.9199 | 0.0062 |
| GCC.MX | 61.0000 | 5841.7334 | 7.3022 | 5849.0355 | 0.0058 |
| RA.MX | 47.0000 | 4380.5612 | 5.4757 | 4386.0369 | 0.0044 |
| ALPEKA.MX | 141.0000 | 2482.0567 | 3.1026 | 2485.1593 | 0.0025 |
Se muestra la evolución del capital invertido al seguir la estrategia de inversión del tipo pasiva, con los respectivos rendimientos mensuales y los rendimientos acumulados.
# Evolución del capital invertido en la estrategia de inversión pasiva
df_pasiva
| Evolución Capital Invertido | Rendimiento Mensual | Rendimiento Mensual Acumulado | |
|---|---|---|---|
| 2020-01-31 | 965018.7471 | nan | nan |
| 2020-02-28 | 903338.5718 | -0.0639 | -0.0639 |
| 2020-03-31 | 757048.3931 | -0.1619 | -0.2155 |
| 2020-04-30 | 802220.6111 | 0.0597 | -0.1687 |
| 2020-05-29 | 798201.0722 | -0.0050 | -0.1729 |
| 2020-06-30 | 834650.4808 | 0.0457 | -0.1351 |
| 2020-07-31 | 823705.1681 | -0.0131 | -0.1464 |
| 2020-08-31 | 821769.9706 | -0.0023 | -0.1484 |
| 2020-09-30 | 835754.2497 | 0.0170 | -0.1340 |
| 2020-10-30 | 827428.6734 | -0.0100 | -0.1426 |
| 2020-11-30 | 943559.6280 | 0.1404 | -0.0222 |
| 2020-12-31 | 994354.1106 | 0.0538 | 0.0304 |
| 2021-01-29 | 969906.8402 | -0.0246 | 0.0051 |
| 2021-02-26 | 1009895.6436 | 0.0412 | 0.0465 |
| 2021-03-31 | 1069852.1452 | 0.0594 | 0.1086 |
| 2021-04-30 | 1093054.1503 | 0.0217 | 0.1327 |
| 2021-05-31 | 1165952.3622 | 0.0667 | 0.2082 |
| 2021-06-30 | 1152661.3088 | -0.0114 | 0.1944 |
| 2021-07-30 | 1166440.9694 | 0.0120 | 0.2087 |
| 2021-08-31 | 1225238.9044 | 0.0504 | 0.2697 |
| 2021-09-30 | 1181902.1843 | -0.0354 | 0.2247 |
| 2021-10-29 | 1185205.4177 | 0.0028 | 0.2282 |
| 2021-11-30 | 1157297.0086 | -0.0235 | 0.1992 |
| 2021-12-31 | 1240373.0731 | 0.0718 | 0.2853 |
| 2022-01-31 | 1195713.8891 | -0.0360 | 0.2391 |
| 2022-02-28 | 1246266.1823 | 0.0423 | 0.2914 |
| 2022-03-31 | 1326361.3735 | 0.0643 | 0.3744 |
| 2022-04-29 | 1204847.9007 | -0.0916 | 0.2485 |
| 2022-05-31 | 1228317.5424 | 0.0195 | 0.2728 |
| 2022-06-30 | 1132528.1470 | -0.0780 | 0.1736 |
| 2022-07-29 | 1144235.9245 | 0.0103 | 0.1857 |
# Visualización
fig1
# Métricas
df_pasiva_metricas
| Capital Inicial | Capital Invertido | Efectivo | Capital Final | Rendimiento Efectivo % | |
|---|---|---|---|---|---|
| Estrategia Pasiva | 1000000 | 967434.3134 | 32565.6866 | 1176801.6111 | 18.5714 |
Al finalizar el periodo se tiene un rendimiento efectivo del $18.57\%$
En esta sección se obtiene un portafolio eficiente con las emisoras que componen al NAFTRAC en la fecha del $2020-01-31$. Esta estrategia del tipo activa consiste en adquirir títulos de las emisoras que conforman al portafolio eficiente en Ratio Sharpe estándar y siguiendo la ponderación indicada por el optimizador. Una vez hecho lo anterior, el portafolio se rebalanceará mensualmente (y hasta la fecha del $2022-07-29$) siguiendo esta regla: la posición en títulos cuyo precio disminuyó en un $5\%$ o más se disminuye en un $2.5\%$; la posición en títulos cuyo precio aumentó en un $5\%$ o más se aumenta en un $2.5\%$.
Se muestra un DataFrame con la siguiente información:
Títulos. Número de acciones adquiridas para la emisora en cuestión.Costo de Compra Bruto. Erogación por concepto de la adquisición de las acciones de la emisora en cuestión (sin tomar en cuenta costos de transacción). Comisión. Comisión por concepto de la adquisición de las acciones de la emisora en cuestión.Costo de Compra Total. Erogación por concepto de la adquisición de las acciones de la emisora en cuestión (tomando en cuenta costos de transacción).Ponderación. Importancia de la posición en la emisora en cuestión respecto al portafolio total.# Selección de fecha para la partición de precios (selección del portafolio eficiente)
fecha = "2021-01-31"
# Estrategia de inversión pasiva
df_activa_info, df_activa, df_operaciones, df_activa_metricas, fig2 = main.estrategiaInversionActiva(capital, comision, fecha,
fechaInicio, fechaFin)
df_activa_info
| Títulos | Costo de Compra Bruto | Comisión | Costo de Compra Total | Ponderación | |
|---|---|---|---|---|---|
| GMEXICOB.MX | 7150.0000 | 584459.6409 | 730.5746 | 585190.2154 | 0.5845 |
| CEMEXCPO.MX | 2444.0000 | 30598.8811 | 38.2486 | 30637.1297 | 0.0306 |
| PE&OLES.MX | 224.0000 | 73907.8936 | 92.3849 | 74000.2784 | 0.0739 |
| CUERVO.MX | 3190.0000 | 140350.4718 | 175.4381 | 140525.9099 | 0.1404 |
| GCC.MX | 1338.0000 | 169247.6698 | 211.5596 | 169459.2294 | 0.1692 |
Se muestra la evolución del capital invertido al seguir la estrategia de inversión del tipo activa, con los respectivos rendimientos mensuales y los rendimientos acumulados.
# Evolución del capital invertido en la estrategia de inversión activa
df_activa
| Evolución Capital Invertido | Rendimiento Mensual | Rendimiento Mensual Acumulado | |
|---|---|---|---|
| 2021-02-02 | 998564.5571 | nan | nan |
| 2021-02-26 | 1047510.7230 | 0.0490 | 0.0490 |
| 2021-03-31 | 1120462.1030 | 0.0696 | 0.1221 |
| 2021-04-30 | 1015101.2632 | -0.0940 | 0.0166 |
| 2021-05-31 | 1083299.1758 | 0.0672 | 0.0849 |
| 2021-06-30 | 1084156.5158 | 0.0008 | 0.0857 |
| 2021-07-30 | 1056619.1507 | -0.0254 | 0.0581 |
| 2021-08-31 | 1092061.1718 | 0.0335 | 0.0936 |
| 2021-09-30 | 957191.4227 | -0.1235 | -0.0414 |
| 2021-10-29 | 1027655.2353 | 0.0736 | 0.0291 |
| 2021-11-30 | 1037248.9854 | 0.0093 | 0.0387 |
| 2021-12-31 | 1054148.9282 | 0.0163 | 0.0557 |
| 2022-01-31 | 1012971.8183 | -0.0391 | 0.0144 |
| 2022-02-28 | 1128960.8197 | 0.1145 | 0.1306 |
| 2022-03-31 | 1245400.0665 | 0.1031 | 0.2472 |
| 2022-04-29 | 1043892.9339 | -0.1618 | 0.0454 |
| 2022-05-31 | 1048591.7900 | 0.0045 | 0.0501 |
| 2022-06-30 | 902702.2967 | -0.1391 | -0.0960 |
| 2022-07-29 | 902355.1093 | -0.0004 | -0.0963 |
# Visualización
fig2
# Métricas
df_activa_metricas
| Capital Inicial | Capital Invertido | Efectivo | Capital Final | Rendimiento Efectivo % | |
|---|---|---|---|---|---|
| Estrategia Activa | 1000000 | 999812.7628 | 44545.3133 | 946900.4226 | -9.6348 |
Al finalizar el periodo se tiene un rendimiento efectivo del $-9.63\%$
Se muestra un DataFrame con la siguiente información:
Timestamp. Fecha en la que se lleva a cabo la transacción en cuestión (compra o venta de títulos de acuerdo al algoritmo definido para la estrategia activa).Ticker. Emisora cuyas acciones se están comprando o vendiendo de acuerdo al algoritmo definido. Títulos. Número de acciones totales con las que cuenta el portafolio antes de que se lleve a cabo la transacción (ya sea de compra o de venta).Títulos Compra (Venta). Número de acciones que se compran (en positivo) o que se venden (en negativo).Títulos Totales. Número de acciones totales con las que cuenta el portafolio después de llevar a cabo la transacción (ya sea de compra o de venta).Comisión. Erogación por concepto de comisión en la transacción hecha.Comisión Acumulada. Comisión acumulada.# Histórico de operaciones
df_operaciones
| Timestamp | Ticker | Títulos | Títulos Compra (Venta) | Títulos Totales | Comisión | Comisión Acumulada | |
|---|---|---|---|---|---|---|---|
| 0 | 2021-02-26 00:00:00 | PE&OLES.MX | 14346.0000 | -6.0000 | 14340.0000 | 2.1526 | 2.1526 |
| 1 | 2021-02-26 00:00:00 | CEMEXCPO.MX | 14340.0000 | 62.0000 | 14402.0000 | 1.0803 | 3.2330 |
| 2 | 2021-03-31 00:00:00 | PE&OLES.MX | 14402.0000 | -6.0000 | 14396.0000 | 1.9763 | 5.2093 |
| 3 | 2021-04-30 00:00:00 | GMEXICOB.MX | 14396.0000 | -179.0000 | 14217.0000 | 18.5298 | 23.7391 |
| 4 | 2021-04-30 00:00:00 | CEMEXCPO.MX | 14217.0000 | 63.0000 | 14280.0000 | 1.2671 | 25.0062 |
| 5 | 2021-05-31 00:00:00 | PE&OLES.MX | 14280.0000 | 6.0000 | 14286.0000 | 2.2684 | 27.2745 |
| 6 | 2021-06-30 00:00:00 | PE&OLES.MX | 14286.0000 | -6.0000 | 14280.0000 | 2.0627 | 29.3373 |
| 7 | 2021-06-30 00:00:00 | GCC.MX | 14280.0000 | 34.0000 | 14314.0000 | 6.7414 | 36.0787 |
| 8 | 2021-07-30 00:00:00 | CUERVO.MX | 14314.0000 | -80.0000 | 14234.0000 | 4.8928 | 40.9715 |
| 9 | 2021-09-30 00:00:00 | PE&OLES.MX | 14234.0000 | -6.0000 | 14228.0000 | 1.8239 | 42.7954 |
| 10 | 2021-09-30 00:00:00 | CUERVO.MX | 14228.0000 | -78.0000 | 14150.0000 | 4.3301 | 47.1255 |
| 11 | 2021-09-30 00:00:00 | GMEXICOB.MX | 14150.0000 | -175.0000 | 13975.0000 | 16.8908 | 64.0163 |
| 12 | 2021-09-30 00:00:00 | CEMEXCPO.MX | 13975.0000 | -65.0000 | 13910.0000 | 1.2098 | 65.2261 |
| 13 | 2021-10-29 00:00:00 | CEMEXCPO.MX | 13910.0000 | -63.0000 | 13847.0000 | 1.0426 | 66.2687 |
| 14 | 2021-10-29 00:00:00 | GMEXICOB.MX | 13847.0000 | 170.0000 | 14017.0000 | 17.9874 | 84.2562 |
| 15 | 2021-10-29 00:00:00 | PE&OLES.MX | 14017.0000 | 6.0000 | 14023.0000 | 1.9790 | 86.2352 |
| 16 | 2021-12-31 00:00:00 | PE&OLES.MX | 14023.0000 | -6.0000 | 14017.0000 | 1.7667 | 88.0019 |
| 17 | 2021-12-31 00:00:00 | GCC.MX | 14017.0000 | 35.0000 | 14052.0000 | 6.8741 | 94.8760 |
| 18 | 2021-12-31 00:00:00 | CEMEXCPO.MX | 14052.0000 | 62.0000 | 14114.0000 | 1.0842 | 95.9602 |
| 19 | 2022-01-31 00:00:00 | CEMEXCPO.MX | 14114.0000 | -63.0000 | 14051.0000 | 0.9923 | 96.9525 |
| 20 | 2022-01-31 00:00:00 | GCC.MX | 14051.0000 | -36.0000 | 14015.0000 | 6.4900 | 103.4424 |
| 21 | 2022-01-31 00:00:00 | PE&OLES.MX | 14015.0000 | -6.0000 | 14009.0000 | 1.6574 | 105.0998 |
| 22 | 2022-02-28 00:00:00 | CEMEXCPO.MX | 14009.0000 | -61.0000 | 13948.0000 | 0.8022 | 105.9020 |
| 23 | 2022-02-28 00:00:00 | GCC.MX | 13948.0000 | -35.0000 | 13913.0000 | 5.8685 | 111.7705 |
| 24 | 2022-02-28 00:00:00 | GMEXICOB.MX | 13913.0000 | 175.0000 | 14088.0000 | 21.9951 | 133.7656 |
| 25 | 2022-02-28 00:00:00 | PE&OLES.MX | 14088.0000 | 5.0000 | 14093.0000 | 1.5976 | 135.3632 |
| 26 | 2022-03-31 00:00:00 | GCC.MX | 14093.0000 | 34.0000 | 14127.0000 | 6.0439 | 141.4070 |
| 27 | 2022-04-29 00:00:00 | GMEXICOB.MX | 14127.0000 | -179.0000 | 13948.0000 | 20.7887 | 162.1958 |
| 28 | 2022-04-29 00:00:00 | CEMEXCPO.MX | 13948.0000 | -60.0000 | 13888.0000 | 0.6735 | 162.8693 |
| 29 | 2022-04-29 00:00:00 | PE&OLES.MX | 13888.0000 | -6.0000 | 13882.0000 | 1.6853 | 164.5546 |
| 30 | 2022-04-29 00:00:00 | GCC.MX | 13882.0000 | -35.0000 | 13847.0000 | 5.8555 | 170.4100 |
| 31 | 2022-05-31 00:00:00 | CUERVO.MX | 13847.0000 | -76.0000 | 13771.0000 | 4.1730 | 174.5830 |
| 32 | 2022-06-30 00:00:00 | PE&OLES.MX | 13771.0000 | -5.0000 | 13766.0000 | 1.1637 | 175.7468 |
| 33 | 2022-06-30 00:00:00 | CEMEXCPO.MX | 13766.0000 | -58.0000 | 13708.0000 | 0.5677 | 176.3145 |
| 34 | 2022-06-30 00:00:00 | GMEXICOB.MX | 13708.0000 | -175.0000 | 13533.0000 | 17.9819 | 194.2964 |
| 35 | 2022-06-30 00:00:00 | GCC.MX | 13533.0000 | -34.0000 | 13499.0000 | 5.3427 | 199.6391 |
| 36 | 2022-07-29 00:00:00 | PE&OLES.MX | 13499.0000 | 5.0000 | 13504.0000 | 1.2818 | 200.9208 |
| 37 | 2022-07-29 00:00:00 | CUERVO.MX | 13504.0000 | 74.0000 | 13578.0000 | 4.2291 | 205.1499 |
| 38 | 2022-07-29 00:00:00 | CEMEXCPO.MX | 13578.0000 | 57.0000 | 13635.0000 | 0.5864 | 205.7363 |
# Medidas de atribución al desempeño
main.atribucionDesempeño(df_pasiva, df_activa, 0.0429 / 12)
| Descripción | Inversión Pasiva | Inversión Activa | |
|---|---|---|---|
| rend_m | Rendimiento promedio mensual | 0.0074 | -0.0023 |
| rend_c | Rendimiento mensual acumulado | 0.1857 | -0.0963 |
| sharpe | Sharpe ratio | 0.0651 | -0.0719 |
Como ya se había constatado previamente, la estrategia de inversión pasiva genera una ganancia efectiva del $18.57\%$, mientras que la estrategia de inversión activa genera una pérdida efectiva del $9.63\%$. Entonces, es de esperarse que la primera (pasiva) tenga un rendimiento promedio mensual positivo, mientras que la segunda estrategia (activa) tenga un rendimiento promedio mensual negativo. Por otra parte, es necesario notar que en el caso de la inversión pasiva, a pesar de tener un rendimiento positivo, no logra un balance equilibrado de rentabilidad a riesgo, ya que por cada unidad de volatilidad que se asume sólo se están ganando en exceso a la tasa libre de riesgo un $6.51\%$.
Es momento de responder a la pregunta: ¿Qué estrategia de inversión propondrías si tu trabajo fuera invertir un millón de pesos?
Por los resultados obtenidos en este laboratorio sin duda alguna la estrategia de inversión pasiva es la predilecta, pues es la que en el periodo de prueba logra generar una ganancia efectiva. Como punto importante a mencionar es que este tipo de estrategias que funcionan a manera de piloto automático suelen ser muy rentables a largo plazo, ya que el inversor únicamente debe ser paciente y esperar a que el mercado refleje los fundamentales de las empresas que lo componen; por lo que invertir siguiendo al índice de referencia del mercado mexicano parece ser una opción viable. Por otra parte, la estrategia de inversión activa puede mejorarse aún más, como con la refinación de parámetros o con la revisión de las reglas del algoritmo para la compra/venta de títulos; aunque por el momento no es una opción viable si se quisiera invertir un millón de pesos, pues tal como se encuentra definida genera una pérdida efectiva en el periodo de prueba.